package com.ztom.top100;

import java.util.HashMap;
import java.util.Map;

/**
 * 任务调度器
 * <p>
 * https://leetcode-cn.com/problems/task-scheduler/
 *
 * @author ZhangTao
 */
public class Code98LeastInterval {

    public int leastInterval(char[] tasks, int n) {
        if (tasks == null || tasks.length == 0 || n < 0) {
            return 0;
        }
        // 记录每个指令出现的次数
        Map<Character, Integer> map = new HashMap<>();
        // 记录出现次数最多的数量
        int maxExec = 0;
        for (char task : tasks) {
            Integer exec = map.getOrDefault(task, 0) + 1;
            map.put(task, exec);
            maxExec = Math.max(maxExec, exec);
        }

        // 记录有多少个出现最多次数的指令
        int maxCount = 0;
        for (Integer value : map.values()) {
            if (value == maxExec) {
                maxCount++;
            }
        }

        return Math.max((maxExec - 1) * (n + 1) + maxCount, tasks.length);
    }
}
